# KGNEW 8/28/2025
import SDL_DS3231
from datetime import datetime
import argparse
import time

# 初始化 DS3231
rtc_device = SDL_DS3231.SDL_DS3231(twi=1, addr=0x68, at24c32_addr=0x57)

# 解析命令行参数
parser = argparse.ArgumentParser(description="DS3231 RTC 工具：查询/设置时间和温度")
parser.add_argument('--read-time', action='store_true', help="读取当前时间")
parser.add_argument('--read-temp', action='store_true', help="读取当前温度")
parser.add_argument('--set-time', type=str, help="设置时间，格式：YYYY-MM-DD HH:MM:SS (UTC)")
parser.add_argument('--monitor', action='store_true', help="连续监控模式：打印温度（和湿度，如果支持）")
parser.add_argument('--interval', type=float, default=1.0, help="监控模式下的打印间隔（秒），默认 1.0")
parser.add_argument('--only-temp', action='store_true', help="监控模式下只打印温度")
parser.add_argument('--only-humid', action='store_true', help="监控模式下只打印湿度（注意：DS3231 不支持湿度）")

args = parser.parse_args()

# 如果没有指定参数，默认读取时间
if not (args.read_time or args.read_temp or args.set_time or args.monitor):
    args.read_time = True

# 设置时间
if args.set_time:
    try:
        dt = datetime.strptime(args.set_time, '%Y-%m-%d %H:%M:%S')
        rtc_device.write_datetime(dt)
        print(f"时间已设置为：{dt}")
    except ValueError:
        print("时间格式错误！请使用 YYYY-MM-DD HH:MM:SS")

# 读取时间
if args.read_time:
    rtc_time_utc = rtc_device.read_datetime()
    print(f"当前时间：{rtc_time_utc}")

# 读取温度
if args.read_temp:
    temperature_celsius = rtc_device.getTemp()
    print(f"当前温度：{temperature_celsius}°C")

# 连续监控模式
if args.monitor:
    print("进入连续监控模式，按 Ctrl+C 退出...")
    while True:
        output = ""
        if not args.only_humid:  # 如果不是只打印湿度，则打印温度
            temperature_celsius = rtc_device.getTemp()
            output += f"当前温度：{temperature_celsius}°C"
        
        if not args.only_temp:  # 如果不是只打印温度，则尝试打印湿度
            # 注意：DS3231 模块不支持湿度传感器，这里仅作为占位符
            # 如果有外部湿度传感器（如 DHT22），需添加相应代码
            humidity = "不支持（DS3231 无湿度传感器）"
            if output:
                output += " | "
            output += f"当前湿度：{humidity}"
        
        if output:
            print(output)
        else:
            print("无数据打印（检查 --only-temp 或 --only-humid 参数）")
        
        time.sleep(args.interval)